perm filename BLOWUP.SAI[DD,BGB] blob
sn#027907 filedate 1973-07-18 generic text, type T, neo UTF8
COMMENT ⊗ VALID 00013 PAGES
RECORD PAGE DESCRIPTION
00001 00001
00003 00002 BEGIN "BLOWUP"
00004 00003 PRELOAD_WITH 1,2,3,4,0,0
00005 00004 PROCEDURE CARCAM
00006 00005 α WINDOW MOVING KEYS
00008 00006 α WINDOW SIZE CONTROL KEYS
00009 00007 PROCEDURE DIGIT
00010 00008 PROCEDURE INSERIES
00011 00009 α INPUT A 216 BY 288 TV IMAGE FROM THE DSK
00012 00010 PROCEDURE XXXXXX
00013 00011 α ASCII 00 TO 37
00014 00012 α ASCII 40 TO 77
00015 00013 IF CHR<"a" THEN CASE CHR-'133 OF
00016 ENDMK
⊗;
BEGIN "BLOWUP"
REQUIRE "ABBREV[SYS,BGB]" SOURCE_FILE;
REQUIRE "DD[DD,BGB]" SOURCE_FILE;
α LEAPING LIZARDS;
REQUIRE 100 NEW_ITEMS;
REQUIRE 100 PNAMES;
α TELETYPE COMMAND STATE;
INTEGER CHR,CTRL,META,LETT,MCBITS;
α SOURCE AND OBJECT WINDOWS;
DEFINE
SX. = "DATUM(SWINDO)[1]",
SY. = "DATUM(SWINDO)[2]",
DX. = "DATUM(SWINDO)[3]",
DY. = "DATUM(SWINDO)[4]",
OX. = "DATUM(OWINDO)[1]",
OY. = "DATUM(OWINDO)[2]",
MP = "DATUM(OWINDO)[3]";
INTEGER FLG;
PRELOAD_WITH 1,2,3,4,0,0;
SAFE INTEGER ARRAY CHAN[1:7];
α NEW _DPYDD CALLS DDJOB;
PROCEDURE _DPYDD; DPYDD(CVIS(TVFILE,FLG),∂(SWINDO),∂(OWINDO),CHAN);
α SET CHANNELS;
PROCEDURE SETCHN;
BEGIN "SETCHN"
INTEGER I,ARG;
ARG ← INCHRW;
IF ARG≤"0" ∨ "7"≤ARG THEN RETURN;
ARG ← ARG LAND 7;
CHAN[1] ← 0;
ARRBLT(CHAN[2],CHAN[1],5);
IF CHR="←" THEN CHAN[ARG]←1 ELSE
IF CHR="↑" THEN FOR I←1 STEP 1 UNTIL ARG DO CHAN[I]←I ELSE
IF CHR="↓" THEN FOR I←1 STEP 1 UNTIL ARG DO CHAN[I]←I+1 ELSE
RETURN;
_DPYDD;
END "SETCHN";
PROCEDURE CARCAM;
BEGIN "CARCAM"
DEFINE MM="*3.2808@-3";
LDX ← 144;
LDY ← 108;
LDZ ← 500;
PDX ← 5.3 MM;
PDY ← 4.0 MM;
FOCAL ← 12.5 MM;
SCALX ← -FOCAL*LDX/PDX;
SCALY ← -FOCAL*LDY/PDY;
SCALZ ← FOCAL*LDZ;
END "CARCAM";
PROCEDURE INITIALIZATION;
BEGIN "INIT"
INTEGER ARRAY ∂S[1:5],∂O[1:7];
SWINDO ← NEW(∂S); NEW_PNAME(SWINDO,"S0");
OWINDO ← NEW(∂O); NEW_PNAME(OWINDO,"O0");
SX.←SY.←0;
OX. ← 0;
OY. ← 0;
DX. ← 144;
DY. ← 108;
MP ← 0;
DELTA ← 1;
LINK ← NEW;
NIL ← NEW;
LOCOR ← NEW;
CARCAM;
OUTSTR("*");
END "INIT";
α WINDOW MOVING KEYS;
PROCEDURE MOVKEY;
BEGIN "MOVKEY"
IF META THEN
BEGIN
IF CHR=";" ∧ OX.-DELTA≥0 THEN OX.←OX.-DELTA ELSE
IF CHR=":" ∧ OX.+DELTA≤511 THEN OX.←OX.+DELTA ELSE
IF CHR="(" ∧ OY.+DELTA*8<480 THEN OY.←OY.+DELTA*8 ELSE
IF CHR=")" ∧ OY.-DELTA*8≥0 THEN OY.←OY.-DELTA*8 ;
END ELSE
IF CTRL THEN
BEGIN
IF CHR=";" THEN SX.←SX.-DELTA ELSE
IF CHR=":" THEN SX.←SX.+DELTA ELSE
IF CHR="(" THEN SY.←SY.-DELTA ELSE
IF CHR=")" THEN SY.←SY.+DELTA;
END ELSE
BEGIN
IF CHR=";" THEN SX.←SX.-DX. ELSE
IF CHR=":" THEN SX.←SX.+DX. ELSE
IF CHR="(" THEN SY.←SY.-DY. ELSE
IF CHR=")" THEN SY.←SY.+DY.;
END;
IF SX.+DX.> 144 THEN SX.← 144-DX. ELSE
IF SX.-DX.<-144 THEN SX.←-144+DX.;
IF SY.+DY.> 108 THEN SY.← 108-DY. ELSE
IF SY.-DY.<-108 THEN SY.←-108+DY.;
_DPYDD;
END "MOVKEY";
α WINDOW SIZE CONTROL KEYS;
PROCEDURE DELKEY;
BEGIN "DELKEY"
IF CHR="[" ∧ DY.≠1 THEN DY.←DY.-1 ELSE
IF CHR="]" ∧ DY.≠108 THEN DY.←DY.+1 ELSE
IF CHR="↑" ∧ DX.≠1 THEN DX.←DX.-1 ELSE
IF CHR="↓" ∧ DX.≠144 THEN DX.←DX.+1;
IF SX.+DX.> 144 THEN SX.← 144-DX. ELSE
IF SX.-DX.<-144 THEN SX.←-144+DX.;
IF SY.+DY.> 108 THEN SY.← 108-DY. ELSE
IF SY.-DY.<-108 THEN SY.←-108+DY.;
_DPYDD;
END "DELKEY";
PROCEDURE DIGIT;
BEGIN "DIGIT"
INTEGER DIG;
DEFINE OXY(X,Y)="BEGIN OX.←X;OY.←Y;END";
DIG ← CHR LAND '17;
IF META THEN
CASE DIG OF
BEGIN
OXY(0,0);
OXY(128,120);
OXY(-128,120);
OXY(-128,-120);
OXY(128,-120);
OY.←120;
OY.←-120;
OX.←-128;
OX.←0;
OX.←128;
END ELSE
CASE DIG OF
BEGIN
SX.←SY.←0;
MP←0;
;
;
DX.←DY.←4;
DX.←DY.←9;
DX.←DY.←18;
DX.←DY.←36;
BEGIN DX.←72;DY.←54;END;
BEGIN DX.←144;DY.←108;SX.←SY.←0;END;
END;
IF SX.+DX.> 144 THEN SX.← 144-DX. ELSE
IF SX.-DX.<-144 THEN SX.←-144+DX.;
IF SY.+DY.> 108 THEN SY.← 108-DY. ELSE
IF SY.-DY.<-108 THEN SY.←-108+DY.;
END "DIGIT";
PROCEDURE INSERIES;
BEGIN "INSERIES"
INTEGER L,M,FLG;
STRING STR,S;
OPEN(1,"TTY",0,1,0,0,0,0);
OUTSTR(" SERIES = ");S←INCHWL;
OUTSTR(" FIRST = ");L←INTIN(1);
OUTSTR(" LAST = ");M←INTIN(1);
RELEASE(1);
IF L>M THEN L↔M;
DO BEGIN
STR ← S&CVS(L);
α DSKTV.;
TVFILE←CVSI(STR,FLG);
IF FLG THEN
BEGIN
TVFILE←NEW(0);
PUT TVFILE IN TVSET;
NEW_PNAME(TVFILE,STR);
END;
END UNTIL M<(L←L+1);
OUTCHR("*");
END "INSERIES";
α INPUT A 216 BY 288 TV IMAGE FROM THE DSK;
PROCEDURE INDSK;
BEGIN "INDSK"
STRING STR;
INTEGER FLG;
OPEN(1,"DSK",8,3,0,0,0,0);
OUTSTR(13&10);
DO BEGIN
EXTERNAL STRING TVSTR;
IF LENGTH(TVSTR)=0 THEN BEGIN
OUTSTR ("FILE = ");
STR ← INCHWL; END ELSE STR←TVSTR;
IF STR<"A" ∨ "Z"<STR THEN BEGIN RELEASE(1);INSERIES;RETURN;END;
LOOKUP(1,STR&".TMP[DAT,BGB]",FLG);
TVSTR←"";
END UNTIL ¬FLG;
RELEASE(1);
TVFILE←CVSI(STR,FLG);
IF FLG THEN
BEGIN TVFILE←NEW(0);
PUT TVFILE IN TVSET;
NEW_PNAME(TVFILE,STR);
END;
OUTCHR("*");
END "INDSK";
PROCEDURE XXXXXX;
BEGIN "XXXXXX"
WHILE TRUE DO
BEGIN "LISTEN"
CHR ← INCHRW;
MCBITS ← (CHR LSH -7)LAND 3;
CTRL ← CHR LAND '200;
META ← CHR LAND '400;
CHR ← CHR LAND '177;
LETT ← CHR LAND '37;
IF "A"≤CHR ∧ CHR≤"Z" ∨ "a"≤CHR ∧ CHR≤"z" THEN
CASE LETT OF
BEGIN ;
"A" ;
"B" ;
"C" ;
"D" _DPYDD;
"E" ERASTV;
"F" ;
"G" ;
"H" ;
"I" INDSK;
"J" ;
"K" ;
"L" ;
"M" ;
"N" ;
"O" ;
"P" ;
"Q" ;
"R" ;
"S" ;
"T" BEGIN EXTERNAL PROCEDURE TVSUBR;TVSUBR;INDSK;END;
"U" ;
"V" ;
"W" ;
"X" ;
"Y" ;
"Z" ;
END ELSE
α ASCII 00 TO 37 ;
IF CHR < "A" THEN CASE CHR OF BEGIN
"NULL" ;
"↓" SETCHN;
"α" ;
"β" ;
"∧" ;
"¬" ;
"ε" ;
"π" ;
"λ" ;
"TAB" ;
"LF" ;
"VT" ;
"FF" ;
"CR" OUTSTR("*");
"∞" ;
"∂" ;
"⊂" ;
"⊃" ;
"∩" ;
"∪" ;
"∀" ;
"∃" ;
"⊗" ;
"↔" ;
"_" ;
"→" ;
"TILDE" ;
"≠" ;
"≤" ;
"≥" ;
"≡" ;
"∨" ;
α ASCII 40 TO 77;
"SPACE" ;
"!" ;
"""" ;
"#" BEGIN INTEGER I;FOR I←1 STEP 1 UNTIL 30 DO OUTSTR(13&10);END;
"$" ;
"%" ;
"&" ;
"'" ;
"(" MOVKEY;
")" MOVKEY;
"*" MP←MP+1;
"+" ;
"," ;
"-" IF MP≠0 THEN MP←MP-1;
"." ;
"/" IF DELTA≠1 THEN DELTA←DELTA-1;
"0" DIGIT;
"1" DIGIT;
"2" DIGIT;
"3" DIGIT;
"4" DIGIT;
"5" DIGIT;
"6" DIGIT;
"7" DIGIT;
"8" DIGIT;
"9" DIGIT;
":" MOVKEY;
";" MOVKEY;
"<" ;
"=" ;
">" ;
"?" ;
"@" ;
END ELSE
IF CHR<"a" THEN CASE CHR-'133 OF
BEGIN
"[" DELKEY;
"\" DELTA←DELTA+1;
"]" DELKEY;
"↑" SETCHN;
"←" SETCHN;
"`" ;
END
ELSE CASE CHR-'173 OF
BEGIN
"{" ;
"|" ;
"ALTMODE" ;
"}" ;
"RUBOUT";
END;
END "LISTEN";
END "XXXXXX";
INITIALIZATION;
XXXXXX;
END "BLOWUP"